/**
 * 事件工具
 */
class ScreenEvent {
  viewer: any;
  scene: any;
  handler: any;
  constructor(viewer: any) {
    this.viewer = viewer;
    this.scene = this.viewer.scene;
  }
  /**
   * 包含多种交互，以及和ALT、SHIFT、CTRL组合触发
   * @param type 
   * LEFT_CLICK ：表示鼠标左键单击事件。
   * LEFT_DOUBLE_CLICK ：表示鼠标左键双击事件。
   * LEFT_DOWN ：表示鼠标左键按下事件。
   * LEFT_UP ：表示鼠标左键向上事件。
   * MIDDLE_CLICK ：表示鼠标中键单击事​​件。
   * MIDDLE_DOWN ：表示鼠标中键按下事件。
   * MIDDLE_UP ：表示鼠标中键向上事件。
   * MOUSE_MOVE ：表示鼠标移动事件。
   * PINCH_END ：表示触摸表面上的两指事件的结束。
   * PINCH_MOVE ：表示触摸表面上两指事件的变化。
   * PINCH_START ：表示触摸表面上的两指事件的开始。
   * RIGHT_CLICK ：表示鼠标右键单击事件。
   * RIGHT_DOWN ：表示鼠标左键按下事件。
   * RIGHT_UP ：表示鼠标右键向上事件。
   * WHEEL ：表示鼠标滚轮事件。
   * @param fn 
   */
  screenSpaceEventHandler(type:string,fn:any) {
    this.handler = new Cesium.ScreenSpaceEventHandler(this.scene.canvas) // event事件处理程序
    this.handler.setInputAction(
      (e) => {
        fn(e);
      },
      Cesium.ScreenSpaceEventType[type]
    )
  }
  // 只支持点击
  pickEventHandler(fn:any) {
    const layer = this.scene.layers.find('jinjiang')
    //需要前置设置属性查询参数，否则pickEvent不生效
    layer.setQueryParameter({
      url: 'http://www.supermapol.com/realspace/services/data-jinjiang/rest/data',
      dataSourceName: 'jinjiang',
      dataSetName: 'test',
      keyWord: 'SmID',
    })
    // 注册鼠标点击事件
    this.viewer.pickEvent.addEventListener(fn)
    // 移除点击事件
    this.viewer.pickEvent.removeEventListener(fn)
  }
  // 删除各类事件
  remove(type:string) {
    Cesium.ScreenSpaceEventType[type],
    Cesium.KeyboardEventModifier.SHIFT;
  }
  // 销毁事件处理程序
  destroy() {
    this.handler.destroy();
    return this.handler.isDestroyed();
  }
}

export default ScreenEvent;

